package com.weixing.mall.provider.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.weixing.mall.provider.model.domain.Order;
import com.weixing.mall.provider.model.vo.report.customer.*;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author jzy
 * @date 2020/6/12
 */
public interface IDayReportCustomerService extends IService<Order> {

    /**
     * 客服部报表-1财务日报/正价/代理商活动
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param orderType  订单类型
     * @param actId   活动Id
     * @param actName   活动名称
     * @param sortField   排序字段
     * @param sortType    排序类型 asc正序  desc 倒序
     * @param page  分页
     * @return
     */
    IPage<CustomerReportFinanceVo> customerFinance(Integer roleType, Long agentId, Long agentPid,Integer pRole,String startTime, String endTime, Integer orderType, Long actId,String actName, String sortField, String sortType, Page page);

    /**
     * 客服部报表-1财务日报-个人业绩查看
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param orderType  订单类型
     * @param actId  活动Id
     * @param actName  活动名称
     * @param sortField   排序字段
     * @param sortType    排序类型 asc正序  desc 倒序
     * @param page  分页
     * @return
     */
    IPage<CustomerReportFinanceVo> customerFinancePerson(Integer roleType,Long agentId,Long agentPid, String startTime, String endTime, Integer orderType,Long actId,String actName,String sortField,String sortType,Page page);
    /**
     *客服部报表-1财务日报-详情
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role  角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile  手机号
     * @param orderType  订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量  6瑕疵总量  7问题总量
     * @param actId  活动Id
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序，desc倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerReportDetailVo>  customerFinanceDetail(Integer isOwn,Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId,String actName, String sortField, String sortType, Page initMpPage);

    /**
     * 客服部报表-1统计销售总额和实际销售总额
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param agentPid 代理商父Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role 角色 角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile 手机号
     * @param orderType 订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量 6瑕疵总量  7问题总量
     * @param actId 活动Id
     * @param actName 活动名称
     * @return
     */
    Map<String,Object> customerFinanceTotal(Integer isOwn,Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId,String actName);

    /**
     * 客服部报表-2折扣日报
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param pRole  代理商父角色
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param discount  折扣
     * @param groupType  分组方式  1客服   2折扣方式"
     * @param sortField   排序字段
     * @param sortType    排序类型 asc正序  desc 倒序
     * @param initMpPage  分页
     * @return
     */
    IPage<CustomerReportDiscountVo> customerDiscount(Integer roleType, Long agentId,Long agentPid,Integer pRole, String startTime, String endTime, BigDecimal discount, Integer groupType, String sortField, String sortType, Page initMpPage);

    /**
     * 客服部报表- 代理活动折扣日报
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param pRole  代理商父角色
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param discount  折扣
     * @param groupType  分组方式  1客服   2折扣方式
     * @param orderType  订单类型
     * @param actId  活动id
     * @param sortField   排序字段
     * @param sortType    排序类型 asc正序  desc 倒序
     * @param initMpPage  分页
     * @return
     */
    IPage<CustomerReportDiscountVo> customerAgentDiscount(Integer roleType, Long agentId,Long agentPid,Integer pRole, String startTime, String endTime, BigDecimal discount, Integer groupType, Integer orderType, Long actId, String sortField, String sortType, Page initMpPage);

    /**
     * 获取所有折扣
     * @return
     */
    List<BigDecimal> discountList();

    /**
     * 客服部报表-2折扣日报-个人查看
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param discount  折扣
     * @param initMpPage  分页
     * @return
     */
    IPage<CustomerReportDiscountPersonVo> customerDiscountPerson(Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, BigDecimal discount, Page initMpPage);

    /**
     * 客服部报表-代理活动折扣日报-个人查看
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param discount  折扣
     * @param orderType  订单类型
     * @param actId  活动id
     * @param initMpPage  分页
     * @return
     */
    IPage<CustomerReportDiscountPersonVo> customerAgentDiscountPerson(Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, BigDecimal discount, Integer orderType, Long actId, Page initMpPage);
    /**
     * 客服部报表-2折扣日报-查询代理商的广告列
     * @param isOwn  1 自己 0团队 2客服
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param plateformName 广告平台
     * @param chatNum 公众号
     * @param directorName 广告员
     * @param orderedAgent 代理商
     * @param payTimeStart  支付开始时间
     * @param payTimeEnd  支付结束时间
     * @param launchDateStart  投放开始时间
     * @param launchDateEnd  投放结束时间
     * @param endOrderDateStart  推送开始时间
     * @param endOrderDateEnd  推送结束时间
     * @param sortField  排序字段
     * @param sortType  排序方式
     * @param initPage  分页
     * @return
     */
    IPage<CustomerAdvertisementDetailVo> customerDiscountAds(
            Integer isOwn,Integer roleType, Long agentId,String plateformName, String chatNum, String directorName, String orderedAgent
            , String payTimeStart, String payTimeEnd, String launchDateStart, String launchDateEnd, String endOrderDateStart, String endOrderDateEnd
            ,String sortField, String sortType, Page initPage);
    /**
     * 客服部报表-5秒杀活动日报
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param pRole  代理商父角色
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param actId   活动Id
     * @param actName   活动名称
     * @param sortField   排序字段
     * @param sortType    排序类型 asc正序  desc 倒序
     * @param initMpPage  分页
     * @return
     */
    IPage<CustomerSeckillDayReportVo> customerSeckill(Integer roleType, Long agentId,Long agentPid,Integer pRole, String startTime, String endTime, Long actId,String actName,String sortField,String sortType,Page initMpPage);
    /**
     * 客服部报表-2.5折秒杀活动报表
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param pRole  代理商父角色
     * @param startTime  开始时间
     * @param endTime  结束时间
     * @param actId   活动Id
     * @param actName   活动名称
     * @param sortField   排序字段
     * @param sortType    排序类型 asc正序  desc 倒序
     * @param initMpPage  分页
     * @return
     */
    IPage<SeckillReportVo> seckillReport25z(Integer roleType, Long agentId,Long agentPid,Integer pRole, String startTime, String endTime, Long actId,String actName,String sortField,String sortType,Page initMpPage);

    /**
     *客服部报表-2.5折秒杀活动报表-详情
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role  角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile  手机号
     * @param orderType  订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量  6瑕疵总量  7问题总量
     * @param actId  活动Id
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序，desc倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<SeckillReport25zDetailVo>  seckillReport25zDetail(Integer isOwn,Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId,String actName, String sortField, String sortType, Page initMpPage);

    /**
     *客服部报表-2.5折秒杀活动报表-合计
     * @param isOwn 0所有 1只查自己的
     * @param roleType 角色类型 1客服  2代理商
     * @param agentId  代理商Id
     * @param agentPid  代理商父Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param role  角色 下单来源 1客服下单，2代理商下单，3客户下单
     * @param userName 用户名
     * @param mobile  手机号
     * @param orderType  订单类型 订单类型 1正价订单；2代理商活动订单；3秒杀订单
     * @param orderStatus  订单状态  1全部总量 2实际总量 3退货总量 4断货总量 5取消总量  6瑕疵总量  7问题总量
     * @param actId  活动Id
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序，desc倒序
     * @param initMpPage 分页
     * @return
     */
    Map<String, Object>  seckillReport25zDetailSum(Integer isOwn,Integer roleType, Long agentId,Long agentPid, String startTime, String endTime, String role, String userName, String mobile, Integer orderType, Integer orderStatus, Long actId,String actName);

    /**
     * 客服部报表--6客户报表
     * @param contactUser 姓名
     * @param contactPhone 手机号
     * @param startTime 购买开始时间
     * @param endTime 购买结束时间
     * @param isRepeat 是否复购 0否 1是 空全部
     * @param orderType 订单类型
     * @param isHave 十日之内是否有购买记录  0无  1有 空全部
     * @param buyTimes 购买数量 0从未购买 1购买过 空全部
     * @param joinStartTime 加入开始时间
     * @param joinEndTime 加入结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc正序  desc倒序
     * @param initMpPage 分页参数
     * @return
     */
    IPage<CustomerUserReportVo> customerUserReport(String contactUser, String contactPhone, String startTime, String endTime, Integer isRepeat, String orderType, Integer isHave, Integer buyTimes, String joinStartTime, String joinEndTime, String sortField,String sortType, Page initMpPage);

    /**
     * 客服部报表--6客户报表-查看购买记录
     * @param contactPhone 手机号
     * @param orderType 订单类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param initMpPage
     * @return
     */
    IPage<CustomerUserReportBuyLogVo> customerUserReportBuyLog(String contactPhone,Integer orderType,String startTime,String endTime, Page initMpPage);
    /**
     * 客服部报表--7秒杀活动报表
     * @param role 角色
     * @param buyer 用户名
     * @param orderType 订单类型
     * @param actId 活动Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillReportVo> customerSeckillReport(Integer role,String buyer,Integer orderType,Long actId,String startTime,String endTime,String actName,String mobile, Page initMpPage);
    /**
     * 客服部报表--8正价销售报表
     * @param agentName 代理商名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc 正序  desc 倒序
     * @param initMpPage
     * @return
     */
    IPage<CustomerReportRegularVo> customerReportRegular(String agentName,String startTime,String endTime,String sortField,String sortType,Integer orderType, Page initMpPage);
    /**
     * 客服部报表--9退货报表
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param agentPid 代理商父Id
     * @param pRole 代理商父角色
     * @param userName 用户名
     * @param actId 活动Id
     * @param orderType 订单类型
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerRefundReportVo> customerRefundReport(Integer roleType, Long agentId,Long agentPid,Integer pRole, String userName, Long actId, Integer orderType, String startTime, String endTime, String monthTime, String sortField, String sortType, Page initMpPage);

    /**
     * 客服部报表--10会员销售报表
     * @param roleType  角色类型 1客服  2代理商
     * @param agentId 代理商Id
     * @param buyer 用户名
     * @param orderType 订单类型
     * @param role 角色 1客服下单，2代理商下单，3客户下单
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerBuyerReportVo> customerBuyerReport(Integer roleType, Long agentId, String buyer, Integer orderType, Integer role, String startTime, String endTime, String sortField, String sortType, Page initMpPage);
    /**
     * 客服部报表--11秒杀活动返还款报表
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param userName 代理商或者客服名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc 正序  desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillRebateVo> customerSeckillRebate(Integer roleType, Long agentId, String userName, String startTime, String endTime, String sortField, String sortType, Page initMpPage);
    /**
     * 客服部报表--11秒杀活动返还款报表-查看返还款20%分配
     * @param roleType 角色类型
     * @param agentId 代理商Id
     * @param userName 代理商或者客服名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc 正序  desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillRebateAllVo> customerSeckillRebateAll(Integer roleType, Long agentId, String userName, String startTime, String endTime, String sortField, String sortType, Page initMpPage);
    /**
     * 11客服部报表--秒杀活动返还款报表--返还款20%订单详情
     * @param type 1个人返还款  2团队返还款
     * @param agentId 代理商Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc 正序  desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillRebateDetailVo> customerSeckillRebateDetail(Integer type,Long agentId,String startTime,String endTime,String sortField,String sortType, Page initMpPage);

    /**
     * 11客服部报表--秒杀活动返还款报表--查看2%分红（一级分红）
     * @param agentId 代理商Id
     * @param userName  下单代理商名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序 asc 正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillBonusOneVo> customerSeckillBonusOne(Long agentId,String userName,String startTime,String endTime, String sortField, String sortType, Page initMpPage);
    /**
     * 11客服部报表--秒杀活动返还款报表--查看1%分红（二级分红）
     * @param agentId 代理商Id
     * @param userName1 一级分红人名称
     * @param userName 下单代理商名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序 asc 正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillBonusTwoVo> customerSeckillBonusTwo(Long agentId,String userName1,String userName,String startTime,String endTime, String sortField, String sortType, Page initMpPage);
    /**
     * 11客服部报表--秒杀活动返还款报表--分红订单详情
     * @param type 类型  1一级分红（2%）  2二级分红（1%）
     * @param agentId 代理商Id
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型  asc 正序  desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerSeckillBonusDetailVo> customerSeckillBonusDetail(Integer type,Long agentId,String startTime,String endTime,String sortField,String sortType, Page initMpPage);
    /**
     *客服部报表--12代理商销售排行榜
     * @param orderType 订单类型 1正价订单；2代理商活动订单；3秒杀活动订单
     * @param actId  活动Id
     * @param isTeam 是否是团队数据 1个人 2团队
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param sortField 排序字段
     * @param sortType 排序类型 asc正序 desc 倒序
     * @param initMpPage 分页
     * @return
     */
    IPage<CustomerReportAgentRankingVo> customerReportAgentRanking(Integer orderType, Long actId, Integer isTeam, String startTime, String endTime, String sortField, String sortType, String agentName,Page initMpPage);
}
